#ifndef NCNNMODEL_HPP
#define NCNNMODEL_HPP

#include <ncnn/net.h>
#include <opencv2/opencv.hpp>

class NCNNModel {
public:
    NCNNModel(const std::string& param_path,
              const std::string& bin_path,
              int input_size = 640,
              const std::string& input_name = "in0",
              const std::vector<std::string>& output_names = {"out0"},
              bool use_gpu = true);

    // 预处理图像（返回 ncnn::Mat）
    ncnn::Mat preprocess(const cv::Mat& image);

    // 推理接口（输入 ncnn::Mat，输出 vector<ncnn::Mat>）
    std::vector<ncnn::Mat> infer(const ncnn::Mat& in_mat);

    ~NCNNModel();

private:
    ncnn::Net net_;
    int input_size_;
    std::string input_name_;
    std::vector<std::string> output_names_;
    bool use_gpu_;
    ncnn::VulkanDevice* device = nullptr;
    std::unique_ptr<ncnn::Extractor> ex;
};

#endif // NCNNMODEL_HPP